home *** CD-ROM | disk | FTP | other *** search
/ Mobiclic 83 / MOBICLIC 83.ISO / mac / pour MacOsX / QuickTime6_MacOsX / QuickTime651.pkg / Contents / Resources / InstallationCheck < prev    next >
Text File  |  2004-02-23  |  4KB  |  182 lines

  1. #!/usr/bin/perl
  2.  
  3. my $SYSTEM_VERS = "/System/Library/CoreServices/SystemVersion.plist";
  4. my $EXIT_VALUE = 0;
  5. my $Package_Path = $ENV{PACKAGE_PATH};
  6. if(CheckVersion("$SYSTEM_VERS", "10.3", "ProductVersion", "<")) {
  7.     @localPkgVers = ExtractPkgVersion("$Package_Path");
  8.     @receiptVers = ExtractPkgVersion("/Library/Receipts/" . GetPackageName("$Package_Path"));
  9.  
  10.     if ($receiptVers[0] == $localPkgVers[0]) {
  11.         if ($receiptVers[1] > $localPkgVers[1]){
  12.             $EXIT_VALUE = ((1 << 6));
  13.         }
  14.     } else {
  15.         if ($receiptVers[0] > $localPkgVers[0]){
  16.             $EXIT_VALUE = ((1 << 6));
  17.         }
  18.     }
  19. }
  20.  
  21. #
  22. # Don't install if target system is less than 10.2.6
  23. #
  24. if(CheckVersion("$SYSTEM_VERS", "10.2.6", "ProductVersion", "<")) {
  25.     $EXIT_VALUE = (1 << 6);
  26. }
  27.  
  28. exit ($EXIT_VALUE);
  29.  
  30. ###
  31.  
  32. sub CheckVersion
  33. {
  34.     my $path            = $_[0];
  35.     my $version         = $_[1];
  36.     my $keyName         = $_[2];
  37.     my $operator        = $_[3];
  38.  
  39.     if (! -e $path) {
  40.         return 0;
  41.     }
  42.  
  43.     if (!$operator) {
  44.         $operator = "==";
  45.     }
  46.  
  47.     my $oldSeperator = $/;
  48.     $/ = \0;
  49.  
  50.     open( PLIST, "$path") || do {
  51.         return 0;
  52.     };
  53.  
  54.     $plistData = <PLIST>;
  55.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  56.  
  57.     @items = split(/<key>/, $plistData);
  58.  
  59.     shift @items;
  60.     foreach $item (@items) {
  61.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  62.         $versiondata{ $1 } = $2;
  63.     }
  64.  
  65.     close(PLIST);
  66.  
  67.     $/ = $oldSeperator;
  68.  
  69.     @theVersionArray = split(/\./, $versiondata{$keyName});
  70.     for ($i = 0; $i < 3; $i++) {
  71.         if(!$theVersionArray[$i]) {
  72.             $theVersionArray[$i] = '0';
  73.         }
  74.     }
  75.  
  76.     @versionArray = split(/\./, $version);
  77.     
  78.     my $actualVersion;
  79.  
  80.     for ($i = 0; $i < 3; $i++) {
  81.         if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2)) {
  82.  
  83.             $actualVersion = $theVersionArray[$i];
  84.             $version = $versionArray[$i];
  85.  
  86.             last;
  87.         }
  88.     }
  89.  
  90.     my $expression = '$actualVersion ' . $operator . ' $version';
  91.     if( eval ($expression) )
  92.     {
  93.         return 1;
  94.     }
  95.     else
  96.     {
  97.         return 0;
  98.     }
  99.  
  100. }
  101.  
  102. sub ExtractPkgVersion
  103. {
  104.     my $path        = $_[0];
  105.  
  106.     my $pkgMajor;
  107.     my $pkgMinor;
  108.  
  109.     $pkgMajor = GetPlistVersion("$path/Contents/Info.plist", "IFMajorVersion");
  110.     $pkgMinor = GetPlistVersion("$path/Contents/Info.plist", "IFMinorVersion");
  111.  
  112.     if (! $pkgMajor || ! $pkgMinor)
  113.     {
  114.         open (FILE, "$path/Contents/Resources/package_version");
  115.         $line = <FILE>;
  116.     chomp $line;
  117.         $line =~ /Major:\s(.*)/;
  118.     $pkgMajor = $1;
  119.         $line = <FILE>;
  120.     chomp $line;
  121.         $line =~ /Minor:\s(.*)/;
  122.         $pkgMinor = $1;
  123.         close (FILE);
  124.     }
  125.  
  126.     if (! $pkgMajor)
  127.     {
  128.         $pkgMajor = 0;
  129.     }
  130.     if (! $pkgMinor)    
  131.     {
  132.         $pkgMinor = 0;
  133.     }
  134.     return ($pkgMajor, $pkgMinor);
  135.    # return $pkgMajor . "." . $pkgMinor;
  136. }
  137.  
  138. sub GetPlistVersion
  139. {
  140.     my $path            = $_[0];
  141.     my $keyName         = $_[1];
  142.  
  143.     my %versiondata;
  144.     
  145.     if (! -e $path) {
  146.         return 0;
  147.     }
  148.  
  149.     my $oldSeperator = $/;
  150.     $/ = \0;
  151.  
  152.     open( PLIST, "$path") || do {
  153.         return 0;
  154.     };
  155.  
  156.     $plistData = <PLIST>;
  157.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  158.  
  159.     @items = split(/<key>/, $plistData);
  160.  
  161.     shift @items;
  162.     foreach $item (@items) {
  163.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  164.         $versiondata{ $1 } = $2;
  165.     }
  166.  
  167.     close(PLIST);
  168.  
  169.     $/ = $oldSeperator;
  170.     
  171.     return $versiondata{$keyName};
  172. }
  173.  
  174. sub GetPackageName
  175. {
  176.   my $pathToPackage    = $_[0];
  177.   
  178.   my @pathItems = split (/\//,$pathToPackage);
  179.  
  180.   return $pathItems[-1];    
  181. }
  182.